package com.zoe.thread.th06_集合不安全问题;


import cn.hutool.core.lang.UUID;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @Author Zoe
 * @Date: 2021/05/03
 * @Description 说明ArrayList不安全
 * <p>
 * 1: 多个线程同时读写
 * 抛出java.util.ConcurrentModificationException异常
 * 并发修改异常
 * <p>
 * 2: 导致原因
 * <p>
 * 3: 解决方案
 * 3.1: 使用Vector代替ArrayList
 * 3.2: Collections.synchronizedCollection()
 * 3.3: new CopyOnWriteArrayList<>(); JUC的包  // 写时复制，读写分离思想
 * <p>
 * 4: 优化建议(同样的错误,不出现第二次)
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        listNotSafe();

    }

    private static void listNotSafe() {
        //        List<String> users = new ArrayList<>();
//        List<String> users = Collections.synchronizedList(new ArrayList<>());
        List<String> users = new CopyOnWriteArrayList<>();


//        users.add("a");
//        users.add("b");
//        users.add("c");


        for (int i = 0; i < 30; i++) {
            new Thread(() -> {
                users.add(UUID.randomUUID().toString().replace("-", "").substring(0, 5));
                System.out.println(users);
            }, i + "").start();
        }
    }
}
